iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0

題目:
(6 級) Casino chips
你將得到三疊賭場籌碼:白色、綠色和黑色
第一疊皆為白色籌碼
第二疊皆為綠色籌碼
第三疊皆為黑色籌碼

你每天只能拿不同顏色的兩個籌碼去賭場。你可以任意挑選顏色,但不能拿兩個同樣顏色的籌碼。

你將得到一組陣列顯示每種顏色籌碼的數量,而你的任務是回傳找出拿取籌碼的最多天數。每天你只能拿兩個籌碼。

範例:

solve([1,1,1]) => 1
因為第一天拿取後將只剩下一個籌碼
	
solve([1,2,1]) => 2
可以拿兩天,第一天拿兩個,第二天拿兩個

solve([4,1,1]) => 2

Ruby 解法:

def solve(arr)
  # 先將 arr 由小到大排序
  arr = arr.sort
	
  # 找出最大數字和第二大數字之間的相差
  diff = arr[2] - arr[1]
	
  # 將計算天數的參數 count 初始值設為 0
  count = 0

  # 先把天數加上第二大數字
  count += arr[1]
	
  # 如果相差大於最小數字
  if diff >= arr[0]
    # 天數直接加上最小數字
    count += arr[0]
  else
    # 反之則先加上相差
    count += diff
    # 再加上平攤之後的最小數字
    count += (arr[0] - diff) / 2
  end

  # 最後回傳計算的天數
  count
end

JavaScript 解法:

function solve(arr){
  // 先將 arr 由小到大排序
  arr.sort((a, b) => a > b ? 1 : -1);
	
  // 找出最大數字和第二大數字之間的相差
  let diff = arr[2] - arr[1]
	
  // 將計算天數的參數 count 初始值設為 0
  let count = 0

  // 先把天數加上第二大數字
  count += arr[1]
	
  // 如果相差大於最小數字
  if (diff >= arr[0]) {
    // 天數直接加上最小數字
    count += arr[0]
  } else {
    // 反之則先加上相差
    count += diff
    // 再加上平攤之後的最小數字
    count += (arr[0] - diff) / 2
  }

  // 最後回傳取整數後的天數
  return Math.floor(count)
}

上一篇
一下大一下小
下一篇
大人行行好
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言